package com.nlx.notes.module.controller.loan;

import com.nlx.notes.module.bean.dto.loan.*;
import com.nlx.notes.module.bean.vo.PageResultVo;
import com.nlx.notes.module.bean.vo.loan.*;
import com.nlx.notes.module.core.util.JSONUtils;
import com.nlx.notes.module.service.loan.LoanManageService;
import com.nlx.notes.support.context.UserHolder;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author nlx
 * @since 2025-10-25
 */
@Slf4j
@RestController
@RequestMapping("/loan")
@RequiredArgsConstructor
public class LoanManageController {


    final LoanManageService loanManageService;

    /**
     * 列表
     * @param loanSummaryQueryDTO 参数
     * @return LoanSummaryVO
     */
    @GetMapping(value = "/page")
    public PageResultVo<LoanSummaryVO> page(LoanSummaryQueryDTO loanSummaryQueryDTO){
        loanSummaryQueryDTO.setUserId(UserHolder.getUserContext().getId());
        log.info("查询借贷列表，参数：{}", JSONUtils.toString(loanSummaryQueryDTO));
        if("all".equalsIgnoreCase(loanSummaryQueryDTO.getLoanStatus())){
            loanSummaryQueryDTO.setLoanStatus(null);
        }
        return loanManageService.pageByCondition(loanSummaryQueryDTO);
    }


    @PostMapping(value = "/v1/save-loan")
    public LoanSummaryVO saveLoan(@RequestBody LoanSummarySaveDTO loanSummarySaveDTO){
        loanSummarySaveDTO.setUserId(UserHolder.getUserContext().getId());
        log.info("保存借款信息，参数：{}", JSONUtils.toString(loanSummarySaveDTO));
        return loanManageService.saveLoan(loanSummarySaveDTO);
    }

    /**
     * 还款
     * @param repayDetailSaveDTO 参数
     * @return
     */
    @PostMapping(value = "/v1/save-repay")
    public LoanDetailVO saveRepay(@RequestBody @Validated RepayDetailSaveDTO repayDetailSaveDTO){
        repayDetailSaveDTO.setUserId(UserHolder.getUserContext().getId());
        log.info("保存还款信息，参数：{}", JSONUtils.toString(repayDetailSaveDTO));
        return loanManageService.saveRepay(repayDetailSaveDTO);
    }



    @PostMapping(value = "/v1/update-loan")
    public LoanSummaryVO updateLoan(@RequestBody LoanSummaryUpdateDTO loanSummaryUpdateDTO){
        loanSummaryUpdateDTO.setUserId(UserHolder.getUserContext().getId());
        log.info("编辑借款信息，参数：{}", JSONUtils.toString(loanSummaryUpdateDTO));
        return loanManageService.updateLoan(loanSummaryUpdateDTO);
    }


    /**
     * 删除还款详情
     * @param loanDeleteDTO 参数
     * @return
     */
    @PostMapping(value = "/v1/delete-loan")
    public Boolean deleteLoan(@RequestBody LoanDeleteDTO loanDeleteDTO){
        loanDeleteDTO.setUserId(UserHolder.getUserContext().getId());
        log.info("删除借款信息，参数：{}", JSONUtils.toString(loanDeleteDTO));
        return loanManageService.deleteLoan(loanDeleteDTO);
    }


    /**
     * 删除还款详情
     * @param loanDeleteDTO 参数
     * @return
     */
    @PostMapping(value = "/v1/delete-loan-detail")
    public Boolean deleteLoanDetail(@RequestBody LoanDeleteDTO loanDeleteDTO){
        loanDeleteDTO.setUserId(UserHolder.getUserContext().getId());
        log.info("删除借款信息，参数：{}", JSONUtils.toString(loanDeleteDTO));
        return loanManageService.deleteLoanDetail(loanDeleteDTO);
    }


    @GetMapping(value = "/v1/loan-detail-page")
    public PageResultVo<LoanDetailPageVO> loanDetailPage(LoanDetailQueryDTO loanDetailQueryDTO){
        loanDetailQueryDTO.setUserId(UserHolder.getUserContext().getId());
        log.info("查询借款详情列表，参数：{}", JSONUtils.toString(loanDetailQueryDTO));
        return loanManageService.loanDetailPage(loanDetailQueryDTO);
    }


    @GetMapping(value = "/v1/loan-overview")
    public LoanOverviewVO loanOverView(LoanSummaryQueryDTO loanSummaryQueryDTO){
        log.info("查询借贷概览，参数：{}", JSONUtils.toString(loanSummaryQueryDTO));
        loanSummaryQueryDTO.setUserId(UserHolder.getUserContext().getId());
        return loanManageService.loanOverView(loanSummaryQueryDTO);
    }



    @GetMapping(value = "/v1/loan-detail-overview")
    public LoanDetailOverviewVO loanDetailOverView(LoanDetailQueryDTO loanDetailQueryDTO){
        log.info("查询某个人的借款概览，参数：{}", JSONUtils.toString(loanDetailQueryDTO));
        loanDetailQueryDTO.setUserId(UserHolder.getUserContext().getId());
        return loanManageService.loanDetailOverView(loanDetailQueryDTO);
    }


//    @PostConstruct
    public void  test(){
        new Thread(() ->{
            try {
                TimeUnit.SECONDS.sleep(30);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            Pattern pattern = Pattern.compile(
                    "(\\d{4})年(\\d{1,2})月(\\d{1,2})[日号]?\\s*(.+?)\\s*(?:欠)?(\\d+)",
                    Pattern.MULTILINE);
            Matcher matcher = pattern.matcher(content);
            int count = 0;
            List<LoanSaveHisDTO> list = new ArrayList<LoanSaveHisDTO>();
            while (matcher.find()) {
                // ---- 1. 提取年月日转 LocalDate ----
                log.info("group1 ：{}",matcher.group(1));
                int year  = Integer.parseInt(matcher.group(1));
                int month = Integer.parseInt(matcher.group(2));
                int day   = Integer.parseInt(matcher.group(3));
                LocalDate date = LocalDate.of(year, month, day);
                // ---- 2. 姓名 ----
                String name = matcher.group(4).trim();
                // ---- 3. 金额 ----
                int amount = Integer.parseInt(matcher.group(5));
                count++;
                log.info("人：{}，金额：{}，时间：{}",name,amount,date);
                LoanSaveHisDTO loanSaveHisDTO  = new LoanSaveHisDTO(name,amount+"",date);
                list.add(loanSaveHisDTO);
            }
            log.info("总数量：{}",count);
            this.loanManageService.saveLoanHis(list);
        }).start();


    }




    private static final String content = "2022年9月13日安大姐欠410\n" +
            "2022年9月21日张妹欠1000\n" +
            "2022年10月13日小肖欠1120\n" +
            "2022年10月25日秋秋欠1580\n" +
            "2022年11月24日华仔欠1500\n" +
            "2022年12月12日大军欠2550\n" +
            "2022年12月12日大燕子欠1790\n" +
            "2022年12月17日小田欠1500\n"+
            "2022年12月23日小郑欠4430\n" +
            "2022年12月25日林狗仔欠990\n" +
            "2023年1月3日美女欠2210\n" +
            "2023年1月4日张志其欠1570\n" +
            "2023年1月7日胡应树欠1150\n" +
            "2023年1月29日白加黑欠480\n" +
            "2023年2月5日姚伟欠740\n" +
            "2023年2月11日吴杨欠1500\n" +
            "2023年2月19日大浦欠770\n" +
            "2023年3月12日小唐欠1200\n" +
            "2023年3月29日岩师傅欠380\n" +
            "2023年4月3日祖平欠1200\n" +
            "2023年4月24日代平欠500\n" +
            "2023年4月29日龙哥欠500\n" +
            "2023年5月16日吴锋欠1500\n" +
            "2023年6月4日中鱼欠610\n" +
            "2023年6月7日湘湘欠1820\n" +
            "2023年6月11日高个子欠600\n" +
            "2023年6月17日小王欠1000\n" +
            "2023年6月26日劳务欠1950\n" +
            "2023年6月27日刘华欠1330\n" +
            "2023年6月29日小余欠1000\n" +
            "2023年7月5日小为欠200\n" +
            "2023年7月10日小杨欠1470\n" +
            "2023年8月1日老酒欠500\n" +
            "2023年8月26日老乡欠1000\n" +
            "2023年8月28日刘少成欠3650\n" +
            "2023年8月29日伍伍欠690\n" +
            "2023年9月12日谭维欠1580\n" +
            "2023年9月16日张文兴欠1700\n" +
            "2023年9月21日鲫鱼欠10630\n" +
            "2023年9月21杨毛欠500\n" +
            "2023年9月26日鸡公欠500\n" +
            "2023年10月4日杨妹欠500\n" +
            "2023年10月4日老王欠300\n" +
            "2023年10月23日张开松欠300\n" +
            "2023年10月27日老头欠1120\n" +
            "2023年11月17日财宝欠1000\n" +
            "2023年11月28日打不死欠500\n" +
            "2023年12月1日小陈欠3030\n" +
            "2023年12月25日小谭欠1530\n" +
            "2023年12月26日鸭毛欠3270\n" +
            "2024年1月5日杨华欠3400\n" +
            "2024年3月14日小胡欠200\n" +
            "2024年3月28日欠陈哥欠1390\n" +
            "2024年3月29日美女欠1000\n" +
            "2024年3月31日小龙欠1000\n" +
            "2024年4月4日张东欠5630\n" +
            "2024年4月24日国国子欠500\n" +
            "2024年5月3日台湾欠1460\n" +
            "2024年5月13日周传国欠1820\n" +
            "2024年5月20日小丁欠1770\n" +
            "2024年5月20日老杨欠400\n" +
            "2024年6月12日吴鸣欠1500\n" +
            "2024年6月14日匡银欠650\n" +
            "2024年6月21日田和欠1170\n" +
            "2024年6月23日魏欠500\n" +
            "2024年6月28日华华欠600\n" +
            "2024年6月30日帅帅欠800\n" +
            "2024年7月30日蒋文欠200\n" +
            "2024年8月13日老徐欠2870\n" +
            "2024年8月26日李高田欠1870\n" +
            "2024年9月14日和权欠2810\n" +
            "2024年9月17日老杨欠600\n" +
            "2024年9月24日一半醒欠1480\n" +
            "2024年9月26日小腾欠950\n" +
            "2024年10月10日梅英欠250\n" +
            "2024年10月11日唐公子欠1700\n" +
            "2024年10月28日小黑欠500\n" +
            "2024年11月11日东东子欠18800\n" +
            "2024年11月18日小杨欠5000\n" +
            "2024年11月25日刘付坤欠700\n" +
            "2024年12月10日鸡王欠2000\n" +
            "2024年12月11日东东欠500\n" +
            "2024年12月12日毛毛老婆欠1210\n" +
            "2024年12月21月毛毛欠1200\n" +
            "2025年1月8日劳务欠8900\n" +
            "2025年1月10日成成子欠9640\n" +
            "2025年2月18日陈志欠8000\n" +
            "2025年3月21日双欠1500\n" +
            "2025年3月30日李小军欠800\n" +
            "2025年4月13日张欠650\n" +
            "2025年5月20日习明欠1600\n" +
            "2025年5月21日胡金凤欠1000\n" +
            "2025年5月21日亮亮欠6200\n" +
            "2025年6月2日中方欠2090\n" +
            "2025年6月8日花姑娘欠290\n" +
            "2025年6月10日桂珍欠3500\n" +
            "2025年6月19日高俊欠1000\n" +
            "2025年6月20日平平子欠2600\n" +
            "2025年6月25日达胜欠1850\n" +
            "2025年6月29日施云欠1280\n" +
            "2025年7月7日俊俊欠660\n" +
            "2025年7月8日吴浩欠7800\n" +
            "2025年7月17日朱总欠1700\n" +
            "2025年7月23日清林欠1980\n" +
            "2025年7月26日来胡子欠990\n" +
            "2025年7月28日刚刚子欠2000\n" +
            "2025年7月28日肖宗钱欠700\n" +
            "2025年8月1日燕子欠2740\n" +
            "2025年8月4日蒲欠1510\n" +
            "2025年8月4日树仔欠540\n" +
            "2025年8月6日波波欠6870\n" +
            "2025年8月14日姚华欠1080\n" +
            "2025年8月15日杨添富欠2600\n" +
            "2025年8月17日辰溪欠1200\n" +
            "2025年8月28日段公子欠9500\n" +
            "2025年8月29日刀欠500\n" +
            "2025年9月1日小黄欠1900\n" +
            "2025年9月6日麻阳欠2260\n" +
            "2025年9月8日水果欠1040\n" +
            "2025年9月11日彭飞欠1170\n" +
            "2025年9月16日团长欠3500\n" +
            "2025年9月17日程程欠970\n" +
            "2025年9月19日张杰欠800\n" +
            "2025年9月22日任欠2400\n" +
            "2025年9月26日和友5960\n" +
            "2025年9月27日小林欠500\n" +
            "2025年9月28日秀英欠13000\n" +
            "2025年9月29日保安妹欠2110\n" +
            "2025年9月29日水建欠6800\n" +
            "2025年9月30日朱妹欠2000\n" +
            "2025年10月3日进进欠4170\n" +
            "2025年10月3日三林欠4430\n" +
            "2025年10月5日茂银欠580\n" +
            "2025年10月5日张玲欠1000\n" +
            "2025年10月5日红梅欠500\n" +
            "2025年10月6日小罗欠2510\n" +
            "2025年10月7日龙龙欠8860\n" +
            "2025年10月7日地生欠1100\n" +
            "2025年10月7日华子欠750\n" +
            "2025年10月7日顺田欠1500\n" +
            "2025年10月9日泽喜欠5720\n" +
            "2025年10月9日刘琴欠1240\n" +
            "2025年10月9日龙永松欠260\n" +
            "2025年10月9日刘琦欠6340\n" +
            "2025年10月9日老许欠720\n" +
            "2025年10月9日岩子欠490\n" +
            "2025年10月10日姚妹妹欠17700\n" +
            "2025年10月10日老妖欠22160\n" +
            "2025年10月11日红豆欠850\n" +
            "2025年10月11日小清欠2760\n" +
            "2025年10月11日坏家伙欠12800\n" +
            "2025年10月11日跃子欠9800\n" +
            "2025年10月11日杨姐欠700\n" +
            "2025年10月11日容容子欠1290\n" +
            "2025年10月11日杨平欠1400\n" +
            "2025年10月11日张开银欠1660\n" +
            "2025年10月12日老杨欠2000\n" +
            "2025年10月12日和欠1510\n" +
            "2025年10月12日玉桃欠2610\n" +
            "2025年10月12日春春欠760\n" +
            "2025年10月12日霞去3610\n" +
            "2025年10月12日吴小英欠2470\n" +
            "2025年10月12日唉子欠4700\n" +
            "2025年10月12日妹舵欠2300\n" +
            "2025年10月12日美国佬欠670\n" +
            "2025年10月12日姚总欠17460\n" +
            "2025年10月12日刘胖子欠1000\n" +
            "2025年10月12号华秀欠190\n" +
            "2025年10月12日娄娄子欠25190\n" +
            "2025年10月12日锋总欠2990";


}
